Skip to content

feat(ads): wrap the Google Ads surface - #23

Merged
alihesari merged 2 commits into
mainfrom
feature/google-ads
Sep 20, 2026
Merged

alihesari merged 2 commits into
mainfrom
feature/google-ads

Conversation

@alihesari

Copy link
Copy Markdown
Member

client.ads.google covers what only Google has: keywords and keyword ideas, search terms, bid strategies, ad schedule, negative keyword lists, assets, Performance Max asset groups, Local Services leads, conversions, and query for a raw read-only GAQL SELECT.

Campaigns, ad groups, ads, audiences and insights stay on client.ads, where they dispatch by connection. client.ads.authorize_google starts the connection.

Every call names a customer_id the connection's grant reaches; any other answers 404. Amounts stay in the account's currency, minor units.

Merged with main (29 commits: contacts, broadcasts, sequences, catalogs). Both conflicts were additive — the new models sit beside main's, and the ads module docstring now names both networks.

Needs fopost/fopost#997 on the API side. 134 tests pass; ruff, mypy and the format check are clean.

client.ads.google covers what only Google has: keywords and keyword ideas,
search terms, bid strategies, ad schedule, negative keyword lists, assets,
Performance Max asset groups, Local Services leads, conversions, and query for
a raw GAQL read. Campaigns, ad groups, ads, audiences and insights stay on
client.ads, where they dispatch by connection.

client.ads.authorize_google starts the connection.
# Conflicts:
#	src/fopost/models.py
#	src/fopost/resources/ads.py
@alihesari
alihesari merged commit 09eb2cf into main Sep 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant